\documentclass[12pt, a4paper]{article}
\usepackage{geometry}
\geometry{
	a4paper,
	left=12.7 mm,
	right=12.7 mm,
	top=12.7 mm,
	bottom=12.7 mm,
}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{physics}
\graphicspath{ {./} }
\usepackage{ctex}

\newcommand{\bvec}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\formula}[1]{\text{式} \ref{#1} }
\begin{document}

\section{Gauss积分}
\footnote
{
	参考：W站词条“高斯求积”，“勒让德多项式”，https://mathworld.wolfram.com/Legendre-GaussQuadrature.html。
	本笔记使用AI辅助。
}
同其他数值积分公式一样，Gauss积分将函数的积分离散为函数在若干个点上的值的加权和。
“原版”Gauss积分适用于$[-1,1]$区域内的函数积分，当然可以通过数学手段拓展定义域。
Gauss积分的形式如下：
\begin{equation}
	I = \int^1_{-1} f(x) \dd x = \sum_{i=1}^n \omega_i f(x_i)
\end{equation}
其中$n$是我们选取的积分点个数。Gauss积分的积分节点$x_i$必须选择在特定位置上，配合相应权重$\omega_i$：
\begin{table}[h]
	\centering
	\caption{部分 Gauss 积分点}
	\label{tab:my-table}
	\begin{tabular}{|c|c|c|}
		\hline
		\textbf{点数 $n$} & \textbf{节点 $x_i$} & \textbf{权重 $w_i$} \\ \hline
		1 & $0.000$ & $2.000$ \\ \hline
		2 & $-0.577$, $0.577$ & $1.000$, $1.000$ \\ \hline
		3 & $-0.775$, $0.000$, $0.775$ & $0.556$, $0.889$, $0.556$ \\ \hline
		4 & $-0.861$, $-0.340$, $0.340$, $0.861$ & $0.348$, $0.652$, $0.652$, $0.348$ \\ \hline
		5 & $-0.906$, $-0.538$, $0.000$, $0.538$, $0.906$ & $0.237$, $0.479$, $0.569$, $0.479$, $0.237$ \\ \hline
	\end{tabular}
\end{table}

虽然Gauss积分的条条框框看起来非常繁琐，但好处立竿见影：
在使用的积分点个数$n$相同时，Gauss积分的代数精度几乎是所有方法中最高的。


\newpage
\section{更多的Gauss积分}

\subsection{任意定义域的Gauss积分}
上文中这种标准形式的Gauss数值积分只适合$[-1,1]$定义域的函数，无疑限制了Gauss积分的运用场景。
只需要通过简单的变量代换，就可以推知任意定义域上的Gauss积分：
\begin{equation}
x = x(t) \qquad x = \frac{a+b}{2} + \frac{b-a}{2}t, t \in [-1,1]
\end{equation}
容易验证，$x(t=-1)=a, x(t=1)=b$。
因此
\begin{equation}
	I = \int^b_a f(x) \dd x = \int^1_{-1} f(\frac{a+b}{2} + \frac{b-a}{2} t)  \frac{b-a}{a} \dd t
	= \frac{b-a}{2} \int^1_{-1} f(\frac{a+b}{2} + \frac{b-a}{2} t) \dd t
	\qquad \dd x = \frac{b-a}{2} \dd t
\end{equation}
即
\begin{equation}
	I = \int^b_a f(x) \dd x = \int^1_{-1} g(t) \dd t \qquad g(t) =  \frac{b-a}{2} f(\frac{a+b}{2} + \frac{b-a}{2} t)
\end{equation}
这将对$f$在$[a,b]$上的积分，转为对$g$在$[-1,1]$上的积分，随后我们即可对$g$进行Gauss积分。

\subsection{自适应Gauss积分}
我们想在$[a,b]$上积分$f$，但是如果区间比较大，那么单次Gauss积分的精度会很低。
根据积分的可加性，我们可以将大的积分区间拆为两个子区间（例如选取中点$c=\frac{a+b}{2}$拆分区间），并在两个小的子区间上分别做一次Gauss积分，随后取他们的和，
这样可以提升积分的精度，尽管增大了计算量：
\begin{equation}
\int^b_a f(x) \dd x = \int^c_a f(x) \dd x + \int^b_c f(x) \dd x
\end{equation}
还有一个问题：如果子区间还很大呢？
我们可以继续拆分子区间的子区间，子区间的子区间的子区间，...，
直到拆分区间不再能提升精度（若拆分前后积分值变化足够小，说明继续拆分已无意义）。
\begin{equation}
\int^b_a f(x) \dd x 
= \int^{\frac{a+c}{2}}_a f(x) \dd x + \int^c_{\frac{a+c}{2}} f(x) \dd x 
+ \int^\frac{b+c}{2}_c f(x) \dd x + \int^b_{\frac{b+c}{2}} f(x) \dd x
= \cdots
\end{equation}
这种方法有时被称为自适应Gauss法，虽然名字听起来很唬人，但原理似乎不算特别复杂。
由于递归过程很难使用自然语言描述，具体参考附件代码。
例如，$\cos$在$[0,20]$上的积分，一次$3$点Gauss积分的结果为$-8.46$，显然是不合理的；
但是一次自适应Gauss积分的结果为$0.9130$，非常接近真实值。

\subsection{多元函数Gauss积分}
我们也可以对多元函数的多重积分运用Gauss积分法，只需要一点数学技巧。
例如，对于一个二元函数$f=f(x,y)$，一个基本方法是
\begin{equation}
	\begin{aligned}
	& \int^1_{-1} \int^1_{-1} f(x,y) \dd x \dd y \\
	= & \int^1_{-1} (\sum_i \omega_i f(x_i, y)) \dd y \\
	= & \sum_j \omega_j (\sum_i \omega_i f(x_i, y_j)) \\
	= & \sum_i \sum_j \omega_i \omega_j f(x_i,y_j)
	\end{aligned}
\end{equation}
对$x$做Gauss积分时视$y$为常数；随后，分别取$i,j$为$1,2,\dots,n$并累和。
若在一个方向上做$n$点Gauss积分，最终共需要$n^2$个积分点。

\newpage
\section{计算Gauss积分节点和权重}
我们可能想问，除了查表之外，如何计算如此复杂的Gauss积分的节点和权重？
我们简要探讨。

\subsection{预备知识： Legendre 多项式}
Legendre多项式对于我们可能比较陌生，前两个Legendre多项式是
\begin{equation}
	P_0 = 1 \qquad P_1 = x
\end{equation}
随后的Legendre多项式可递推得到：
\begin{equation}
	P_{n} = \frac{(2n-1)xP_{n-1} - (n-1) P_{n-2}}{n} \qquad n \ge 2
\end{equation}
例如，
\begin{equation}
	P_2 = \frac{3 x P_1 - P_0}{2} = \frac{3x^2 - 1}{2}
\end{equation}

\subsection{Legendre 多项式和 Gauss 积分的联系}
道理我都懂，但是这和Gauss积分有什么关系？
事实上，$n$点 Gauss 积分 的积分节点 $x_i$ 就是 $n$ 阶 Legendre 多项式的各个零点
（$n$阶Legendre多项式刚好有$n$个零点）：
\begin{equation}
	x_i \quad \text{such that} \quad P_n(x_i) = 0
\end{equation}
其中$P_n$是$n$阶Legendre多项式。相应的权重$\omega_i$为：
\begin{equation}
	\omega_i = \frac{2}{(1-x_i^2)(P'_n (x_i))^2}
\end{equation}
其中$P'_n (x_i)$是相应Legendre多项式在$x_i$处的导数值
（此处$P'_n (x_i)$中的括号指的是函数参数，而不是运算的括号）。

我们简要验证一下$2$点Gauss积分公式。
$P_2$的两个零点是$x_i = \pm \sqrt{1/3}$，和所述一致；
此外，$P'_2 = 3x$，那么$\omega_i = \frac{2}{(1-x_i^2)(P'_2(x_i)^2)} = \frac{2}{(1-1/3)(9 \cdot 1/3)} = 1$，也和所述一致。

我们还可以使用SymPy符号计算来自动导出各阶Legendre多项式及其相应的Gauss点。

\end{document}